package br.ucb.cesbdao.model.impl;

import java.sql.SQLException;
import java.util.ArrayList;

import lombok.Getter;
import lombok.Setter;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.beans.Trabalhador;
import br.ucb.cesbdao.beans.Grupo;
import br.ucb.cesbdao.model.TrabalhadorPorGrupoModel;
import br.ucb.cesbdao.persistencia.dao.TrabalhadorPorGrupoDAO;
import br.ucb.cesbdao.persistencia.factory.FactoryConnection;
import br.ucb.cesbdao.persistencia.factory.FactoryDAO;
import br.ucb.cesbdao.servicos.Servicos;

public class TrabalhadorPorGrupoModelImpl implements TrabalhadorPorGrupoModel {

	private Logger logger = Servicos.carregaLog(TrabalhadorPorGrupoModelImpl.class);
	@Getter @Setter
	private TrabalhadorPorGrupoDAO dao;

	public TrabalhadorPorGrupoModelImpl() {
	}

	@Override
	public void addTrabalhador_grupo(int chavePessoa, int idGrupo) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			getDao().addTrabalhador_grupo(chavePessoa, idGrupo);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
	}

	@Override
	public ArrayList<Trabalhador> consultaTrabalhadorGrupoByGrupo(Integer id) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().consultaTrabalhador_grupoByGrupo(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Grupo> consultaTrabalhadorGrupoByTrabalhadorId(Integer id) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().consultaTrabalhador_grupoByTrabalhador_id(id);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public boolean consultaTrabalhadorGrupoAmbos(int chavePessoa, int idGrupo) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().consultaTrabalhador_grupoAmbos(chavePessoa, idGrupo);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return false;
	}

	@Override
	public int excluiTrabalhadorGrupo(int chavePessoa, int idGrupo) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().excluiTrabalhador_grupo(chavePessoa, idGrupo);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return 0;
	}

	@Override
	public int alteraGrupo(int oldChavePessoa, int oldIdGrupo, int newChavePessoa, int newIdGrupo) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().alteraGrupo(oldChavePessoa, oldIdGrupo, newChavePessoa, newIdGrupo);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return 0;
	}

	@Override
	public ArrayList<Trabalhador> consultaTrabalhadorByHorarioGrupo() {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().consultaTrabalhadorByHorarioGrupo();
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}

	@Override
	public ArrayList<Trabalhador> consultaTrabalhadorByDiaGrupo(int dia) {
		try {
			setDao(FactoryDAO.getDaoTrabalhadorPorGrupo(FactoryConnection.getInstance().criaConexao()));
			return getDao().consultaTrabalhadorByDiaGrupo(dia);
		} catch (ClassNotFoundException | SQLException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			FactoryConnection.getInstance().closeConexao(getDao().getConexao());
		}
		return null;
	}
}
